With today's widespread use of the Internet as a primary communication medium, pre-existing communication devices are now being designed so that they are capable of communicating over packet-switched networks. For instance, telephones, pagers, cell phones, handheld computers, and even fax machines can now be accessed and controlled from over the Internet. Communication over a packet-switched network using communication devices that traditionally communicate over a circuit-switched telephone network is generally known as network telephony, or IP telephony when an IP network is involved.
A user having several communication devices (e.g., a cell phone, laptop and handheld PC) can configure each of these devices to identify itself to the network using a single alias or identifier (e.g., username@b.com). In this way, the user is not limited to communicating with others via a single device, but instead has the ability to communicate via several different devices. Nonetheless, the ability for a user to have several devices “present” on a computer network creates a need for other users to be able to determine the status or state of the user's many devices.
“Presence” refers to the availability, proximity, activity level or operating state of a user on a network. The ability for users to monitor each other's presence is a feature offered in connection with many applications that support network telephony. For example, instant messaging applications such as MSN or Yahoo have an “available buddy” feature, in which a user of the application can determine whether select users are available for engaging in communication. The data retrieved and returned to the buddy list, e.g. “John OFFLINE” or “Susan ACTIVE,” is known as “presence information,” and is generally maintained by a program called a “presence agent.” According to most conventional network configurations, the presence agent is implemented as a dedicated server. Typically, the presence agent supports network telephony protocols such as the session initiation protocol (SIP). Device users can register their devices with the presence agent (e.g., via a registrar module) in order to have their presence maintained and to allow various programs on the network to facilitate network telephony services. As such, a first device user wishing to detect the presence of a second device user does so by “subscribing” with the presence agent, such as via a SIP SUBSCRIBE message. The presence agent intermediates between the first user, also known as the watcher, and the second user to facilitate the communication of the second device user's presence information to the first device user.
The ability of a presence agent to accurately determine and maintain presence information for one or more users significantly enhances communication and task completion over the network. For example, a very mobile user may only be on the network at certain times throughout the day, and may be accessing the network from varying locations. By subscribing as a watcher of this mobile user, it becomes possible for another user to detect the presence of the mobile user during the times at which the mobile user's computing device is actually connected to the network. So, when the mobile user is present, the watcher can correspond instantly with the mobile user via a chat session or videoconferencing call, as opposed to resorting to a non-real-time communication such as e-mail messaging. Hence, presence is an especially important factor for facilitating communication between users. Unfortunately, however, conventional presence agents are unable to determine presence with sufficient granularity. As an example, consider a scenario where a second user has subscribed with a presence agent as a watcher of a first user. If the first user is in the second users' available buddy list, and the first user's computing device suddenly goes into sleep mode, the second user's buddy list should still indicate that the first user's device is available for communication rather than indicate that the first user's device is “offline.” An indication of “offline” does not accurately reflect that the first user's device may still be connected to the network and may still be able to receive messages. Yet, many presence agents only provide generalized presence information, such as “offline” or “unavailable,” and do not account for more ambiguous presence conditions.
Some other presence agents attempt to more accurately present presence information by shortening the subscription periods of watchers. According to this mode of operation, when a watcher subscribes with the presence agent, the watcher's subscription time is minimized (e.g., by using a shortened timeout period), and so the watcher must frequently renew the subscription. Each time the watcher renews, the watcher receives the most current presence information. While this method of presence determination can be effective for detecting subtle changes in presence, the constant updating of subscriptions causes the presence agent to use more bandwidth and increases its overall processing time. Furthermore, this method increases the message load on a server that operates the presence agent resulting in a significant reduction in scalability.
Still further, many presence agents are unable to provide accurate presence information for those users who have several devices registered and present upon the network. Current standards for retrieving presence information pertaining to multiple device users simply call for the presence of each individual device to be determined, and then presented to the watcher as a compound document, such as an HTML file. As a result, the watcher that receives the compound document indicating the presence information for each device must “guess” which device's presence information most accurately reflects the presence of the user. However, just because a user's mobile phone, pager, laptop, PDA, and desktop computer are all present on the network does not mean the user is using all of them. Indeed, the presence information of the individual devices says very little about the actual presence (e.g., activity or availability) of the user.